<?php
/*
    数组的相关处理函数：

    一、数组键/值操作有关的函数:
    1、array_values()---返回数组中所有的值（返回索引函数）
    2、array_keys()---返回数组中所有的键名
    3、in_array()---检查数组中是否存在某个值
    4、array_key_exists()---检查给定的键名或索引是否存在于数组中
    5、array_flip()---交换数组中键和值
    6、array_reverse()---返回一个单元顺序相反的数组
    

    二、统计数组元素个数和唯一性
    1、count(); 别名 sizeof();  //统计数组长度
    2、array_count_values()---统计数组中所有的值出现的次数
    3、array_unique()---移除数组中重复的值


    三、使用回调函数处理数组的函数
    1、array_filter()---用回调函数过滤数组中的单元
    2、array_walk()---数组中的每个成员应用用户函数
    3、array_map()---将回调函数作用到给定数组的单元上

*/

//1、array_values()案例
/*
    $lamp=array("os"=>"linux","webserver"=>"Apache",
	        "db"=>"Mysql","laguage"=>"php");

    $arr=array_values($lamp);//返回数组的值（新的数组$arr）

    echo "<pre>";
    print_r($arr);
    echo "</pre>";
*/

//list()把数组转换成变量,提取索引数组
 /*   
    $lamp=array("os"=>"linux","webserver"=>"Apache",
	        "db"=>"Mysql","laguage"=>"php");
    $arr=array_values($lamp);

    list($os,$web,$db,$laguage)=$arr;//把$arr数组的索引提出来，只剩值

    echo $os.'<br>';
    echo $web.'<br>';
    echo $db.'<br>';
    echo $laguage.'<br>';

*/

//2、array_keys()案例
/*
    $lamp=array("os"=>"linux","webserver"=>"Apache",
	        "db"=>"Mysql","laguage"=>"php","html"=>"100");//加html项

 //   $arr=array_keys($lamp);//指定第一个参数，返回数组键名
 //   $arr=array_keys($lamp,"linux");//指定第二个参数，返回某个指定界面
      $arr=array_keys($lamp,"100",true);//指定第三个参数，返回[0]=>html
                            //第三个参数true 按类型匹配，须严格遵守
    echo "<pre>";
    print_r($arr);
    echo "</pre>";

*/


//3、in_array()案例
/*
    $lamp=array("os"=>"linux","webserver"=>"Apache",
	            "db"=>"Mysql","laguage"=>"php","html"=>"100",
	            array("a","b"));//数组中的数组

    //if判断linux是否存在于$lamp数组中
 //   if(in_array("linux",$lamp)){

 	if(in_array(array("b","a"),$lamp)){  //还可搜索二维数组
    //和array("a","b")不是同一个数组
        echo "exists";//存在，输出存在    
    }else{
    	echo "not exists";//否则，输出不存在
    }

*/


//4、array_key_exists案例（没有第三个参数，只有下标和值）
/*
    $lamp=array("os"=>"linux","webserver"=>"Apache",
	            "db"=>"Mysql","laguage"=>"php");

    if(array_key_exists("os1",$lamp)){
    	echo "exists";
    }else{
    	echo "not exists";
    }
*/

//5、array_flip()案例
/*
    $lamp=array("os"=>"linux","webserver"=>"Apache",
	            "db"=>"Mysql","laguage"=>"php");

    $new=array_flip($lamp);//如果出现下标相同，后面会把前面的覆盖

    echo "<pre>";
    print_r($new);
    echo "</pre>";
*/

// 6、array_reverse()案例 
/*
   $lamp=array("os"=>"linux","webserver"=>"Apache",
	            "db"=>"Mysql","laguage"=>"php"); 

   $new=array_reverse($lamp); 

   echo "<pre>";
   print_r($new);
   echo "</pre>"; 
*/


//7、count()案例
/*
   $lamp=array("os"=>"linux","webserver"=>"Apache",
	            "db"=>"Mysql","laguage"=>"php"); 

   echo count($lamp);
*/
/*
   $lamp1=array("os"=>"linux","webserver"=>"Apache",
	            "db"=>"Mysql","laguage"=>"php",array(1,2,4,5,6,7)); 

   echo count($lamp1,0);//数组中的元素个数
   echo count($lamp1,1);//数组中的元素和数组中数组的元素个数和
*/


//8、array_count_values()
/*
   $lamp=array("os"=>"linux","webserver"=>"Apache",
	            "db"=>"Mysql","laguage"=>"php","2"=>"linux");


   $new=array_count_values($lamp);

   echo "<pre>";
   print_r($new);
   echo "</pre>";

*/


//9、array_unique()案例
/*
   $lamp=array("os"=>"linux","webserver"=>"Apache",
	            "db"=>"Mysql","laguage"=>"php","2"=>"linux");

   $new=array_unique($lamp);

   echo "<pre>";
   print_r($new);
   echo "</pre>";
*/


//10、array_filter()案例
/*
   $arr=array(1,3,4,5,-5,-6,-7,6,7,-9);

   $new=array_filter($arr,"hello");//过滤数组自己定义，用"hello"，
                                   //把函数名以字符串方式返回

   function hello($k){   //自定义一个参数$k
   	   if($k>0){    //大于0的留下，保留偶数：$k%2==0;
   	   	  return true;
   	   }else{
   	   	  return false;
   	    }
   }

   echo "<pre>";
   print_r($new);
   echo "</pre>";
*/


//11、array_walk()案例
/*
   $lamp=array("os"=>"linux","webserver"=>"Apache",
	            "db"=>"Mysql","laguage"=>"php");

// array_walk($lamp,"myfun");//回调函数myfun，把$lamp中的值都传入myfun
   array_walk($lamp,"myfun","@@@@");//也可传入第三个参数

// function myfun($value,$key){  //分别传入下标和值，需调用4次
//     echo "the key  '{$key}'  has the value  '{$value}'<br>";
//   }

   function myfun($value,$key,$p){ //自动一一对应
       echo "the key  '{$key}'  has  {$p}  the value '{$value}'<br>";
   }
*/
 /*  array_walk($lamp,"myfun");

    function myfun(&$value,$key){ //引用赋值
  	   $value="man";
    }

    echo "<pre>";
    print_r($lamp);
    echo "</pre>";
*/


//11、array_map(回调函数，数组)案例
/*
     $lamp=array("os"=>"linux","webserver"=>"Apache",
	            "db"=>"Mysql","laguage"=>"php");

     $new=array_map("myfun",$lamp);
     function myfun($n){
        return "==".$n."==";//先赋值再返回传值,所有的值都加了==号
     }
     	 
     echo "<pre>";
     print_r($new);
     echo "</pre>";
*/    



     $lamp1=array("os"=>"linux","webserver"=>"Apache",
	            "db"=>"Mysql","laguage"=>"php");

     //$lamp1,$lamp2两个数组长度一致
     $lamp2=array("os"=>"windows","webserver"=>"Apache",
	            "db"=>"Mysql","laguage"=>"javascript");

     $new=array("myfun",$lamp1,$lamp2);

     function myfun($k,$j){  //一一对应,第一个数组中的每个元素传给$k
     	                     //第二个数组中的每个元素传给 $j(回调参数)
         if($k==$j){
         	return "same"; 
         }else{
         	return "different";
         }
     }
 
     echo '<pre>';
     print_r($new);
     echo '</pre>';

?>